import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[][] arr=new int[][]{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
        int n=5;
        int m=4;
        int[] ret=clockwisePrint(arr,n,m);
        for(int i=0;i<n*m;i++){
            System.out.print(ret[i]+" ");
        }
    }
    public static int[] clockwisePrint(int[][] mat,int n,int m){
        if(mat==null||mat.length==0||mat[0].length==0){
            return new int[]{};
        }
        int[] arr=new int[n*m];
        int left=0;
        int right=m-1;
        int start=0;
        int end=n-1;
        int k=0;
        while (left<=right&&start<=end){
            for(int i=left;i<=right;i++){
                arr[k++]=mat[start][i];
            }
            for(int i=start+1;i<=end;i++){
                arr[k++]=mat[i][right];
            }
            if(left<right&&start<end){
                for(int i=right-1;i>left;i--){
                    arr[k++]=mat[end][i];
                }
                for(int i=end;i>start;i--){
                    arr[k++]=mat[i][left];
                }
            }
            left++;
            right--;
            start++;
            end--;
        }
        return arr;
    }

//    public static int[] clockwisePrint(int[][] mat, int n, int m) {
//        // write code here
//        int l=0;
//        int r=n-1;
//        int lowL=0;
//        int lowR=m-1;
//        int[] arr=new int[n*m];
//        int index=0;
//        while (l<r&&lowL<lowR){
//            for(int i=l;i<=r;i++){
//                arr[index++]=mat[l][i];
//            }
//            for(int i=lowL+1;i<=lowR;i++){
//                arr[index++]=mat[i][r];
//            }
//            for(int i=r-1;i>=lowL;i--){
//                arr[index++]=mat[lowR][i];
//            }
//            for(int i=lowR-1;i>l;i--){
//                arr[index++]=mat[i][lowL];
//            }
//            l++;
//            r--;
//            lowL++;
//            lowR--;
//        }
//        return arr;
//    }
















    public int findMaxGap(int[] A, int n) {
        // write code here
        int left=A[n-1];
        int right=A[0];
        Arrays.sort(A);
        int x=A[n-1]-left;
        int y=A[n-1]-right;
        if(x>y){
            return x;
        }
        return y;
    }
}
